package com.tensquare.web.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import javax.servlet.http.HttpServletRequest;

@Component
public class WebFilter extends ZuulFilter {

    @Override
    //指定过滤器类型
    public String filterType() {
        //pre ：可以在请求被路由(转发)之前调用
        //route ：在路由(转发)请求时候被调用
        //post ：在route(转发)和error过滤器之后被调用
        //error ：处理请求时发生错误时被调用
        return "pre";
    }

    @Override
    //定义过滤器执行优先级
    //返回0就是最高优先级
    public int filterOrder() {
        return 0;
    }

    @Override
    //指定当前拦截器是否启用
    public boolean shouldFilter() {
        //可以写一些判断,什么情况下启用,什么情况下不启用
        return true;
    }


    /**
     * 网站前台(用户使用)的token的转发
     */
    @Override
    //网关过滤器,业务逻辑代码书写在该方法中即可
    public Object run() throws ZuulException {
        /*网关过滤器转发的时候,只会按照标准的HTTP协议,我们在前端
          自己添加的http头(Authorization头)并不会转发
          所以我们要在过滤器这里将自己添加的Authorization头信息,添加到转发后的请求中*/
        //1.获取请求对象
        RequestContext requestContext = RequestContext.getCurrentContext();
        HttpServletRequest request = requestContext.getRequest();
        //2.获得Authorization头信息
        String authorization = request.getHeader("Authorization");
        if (!StringUtils.isEmpty(authorization)) {
            //3.将Authorization头信息添加到网关转发的请求中
            requestContext.addZuulRequestHeader("Authorization", authorization);
        }
        return null;
    }


}